perm filename WAVE.FAI[MUS,LCS]2 blob
sn#316227 filedate 1977-11-09 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00008 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE WAVE
C00007 00003 L101: SETOM X#
C00009 00004 L6: JSA 16,DPYOUT
C00014 00005 ININT: SETZ
C00015 00006 GNAME: SETZM FILEXT+1
C00016 00007 GETNAM: MOVEI A,
C00017 00008 DSKIN: MOVE NN,[INPO: IOWD =1024,WD]
C00018 ENDMK
C⊗;
TITLE WAVE
EXTERNAL TYPLOC,DDCLR,DPYSET
EXTERNAL DPYOUT,AVECT,ALINE
;******** DDCLR IS IN TVRLIB.REL *******
A←1 ↔ B←2 ↔ C←3 ↔ D←5 ↔ K←4 ↔ NN←7 ↔ LPDL←←69 ↔ P←17 ↔ BC1 ←13
E←6 ↔ DUR←15 ↔ SKP←11
BEG: MOVE P,[-LPDL,,PDL-1]
JSA 16,TYPLOC
[-=260]
[-=512]
TRYOV: CLRBFI
OUTSTR [ASCIZ/ TYPE FILE NAME(<CR>=TEST.SND) /]
PUSHJ P,GNAME
OPEN 11,[17↔'DSK '↔0]
JRST 4,.
LOOKUP 11,FILNAM
JRST TRYOV
AOJ BC1, ;SET TO 1 FOR SECOND DEFAULT FILE NAME
INHDR: MOVE A,[INPHD: IOWD =128,WD]
MOVEI A+1,0
INPUT 11,A
TYPIT: HRRZ B,2(A) ;THE SAMPLE RATE
SRT: FLTR B,B
HRRZ C,3(A) ; BITS/SMPL
MOVEM C,BITS# ;0=12 1=18
MOVE D,4(A) ; NCHNS
MOVE E,5(A)
CAML E,[=500000] ;IS IT FLOATING?
KIFIX E,E ; YES, FIX IT.
MOVEM E,MAXAMP# ;MAXAMP
MOVE DUR,6(A) ;DURATION
MOVEM E,DURX#
OUTSTR [ASCIZ/
SRATE =/]
MOVEM B,FSRATE#
KIFIX B
PUSHJ P,OUTINT
OUTSTR [ASCIZ/ BITS =/]
IMULI C,=18
SKIPN C
MOVEI C,=12
MOVE C
PUSHJ P,OUTINT
OUTSTR [ASCIZ/ NCHNS =/]
MOVEM D,NCHNS#
MOVE D
PUSHJ P,OUTINT
OUTSTR [ASCIZ/ MAXAMP =/]
MOVE E
PUSHJ P,OUTINT
OUTSTR [ASCIZ/ SMPLS =/]
MOVE DUR
PUSHJ P,OUTINT
OUTSTR [ASCIZ/ 100*DUR=/]
KIFIX B,FSRATE
MOVE DUR
IMULI =100
IDIV D
IDIV B
PUSHJ P,OUTINT
SKIPN DUR
MOVE DUR,[=20000000] ;IN CASE 0 DURATION IN HEADER
HRRZI A,=512
HRRZM A,INC#
MOVEI 0,1
MOVEM 0,INCX# ;INCREMENT THROUGH FILE. 1 OR 2
SOJ D, ;NCHNS
MOVEM D,NCHNX# ;0=MONO, 1=CH1, 2=CH2
JUMPE D,L8
AOS INCX ; MAKE INCREMENT 2 NOW
OUTSTR [ASCIZ/
TYPE CHANNEL NUM. /]
INCHWL B
PUSHJ P,ININT
MOVEM 0,NCHNX
L8: CLRBFI
OUTSTR [ASCIZ/
TYPE NUM OF SAMPLES (<CR>=512) AND SKIP NUMBER. /]
HRRZI A,=1024
HRRZM A,NEXT#
INCHWL B
PUSHJ P,ININT
CAILE =3072 ;WON'T DISPLAY MORE THAN 3072 SMPLS AT A TIME.
MOVEI =3072
MOVEM J#
SETZ
INCHRS B
CAIA
PUSHJ P,ININT
SETZM SKP
JUMPE 0,INCR ;NO SKIP AHEAD
MOVEI A,3
SUB A,BITS
MOVEM A,BDIV# ;BIT DIVIDER
IDIV 0,BDIV
MOVE SKP,0 ;SKP HAS NUM OF WDS TO SKIP
SETZ 0,
SKIPA
SLOOP: PUSHJ P,DSKIN ;THROW AWAY A BUFFER FULL
ADDI 0,=1024
MOVEM 0,NEXT
CAMG 0,SKP
JRST SLOOP ;GO BACK IF MORE TO THROW AWAY
SUBI 0,=1024
IMUL 0,BDIV ;SKP NOW HAS NUM OF SMPLS SKIPPED.
EXCH SKP,0
INCR: SKIPE B,J
MOVEM B,INC
MOVE A,NCHNX ;GET THE INCREMENT NUM.
ADD A,SKP
MOVEM A,KCNT#
SX: SOJ A,
MOVEM A,JCNT#
SETZM JZ#
L11: HRRZI A,1
HRRZM A,L#
MOVE A,INC
MOVEM A,LX#
L100: PUSHJ P,DSKIN
MOVEI 0,=1024
ADDM 0,NEXT ;FOR LATER SKIP AHEAD
L101: SETOM X#
SETZ K,
MOVE A,[POINT 12,WD]
L2: SKIPE WD(K)
SETZM X
ILDB 0,A
HRRZM 0,FW(K)
ILDB 0,A
HRRZM 0,FW+1(K)
ILDB 0,A
HRRZM 0,FW+2(K)
ADDI K,3
CAIGE K,=3072
JRST L2
; SKIPE X ADD THIS TO RESTART ON ZEROS
; JRST L8
L1: JSA 16,DDCLR
MOVE A,[=1000.0]
FLTR B,INC
FDVR A,B
MOVEM A,X
L40: JSA 16,DPYSET
[1]
DP
[=4000]
JSA 16,ALINE
NFHD
[=409]
NFHD
[-=409]
JSA 16,ALINE
[=500]
ZER
NFHD
ZER
L10: MOVE A,[-=500.0]
MOVEM A,Z#
MOVE K,L
L4: MOVE JCNT
ADD INCX
MOVEM JCNT
CAMGE DUR,JCNT
JRST L6 ;END OF SAMPLES, GO DPY IT.
MOVE A,FW-1(K)
CAILE A,=2047
SUBI A,=4096
MOVEM A,JZ
IDIVI A,5
MOVEM A,JY#
KIFIX A,Z
MOVEM A,JX#
JSA 16,AVECT
JX
JY
CAIN K,=3072
JRST L6
MOVE A,X
FADM A,Z
CAMGE K,LX
AOJA K,L4
L6: JSA 16,DPYOUT
[1]
CAML DUR,KCNT ;EXIT IF COUNTER EXCEEDS NUM. SMPLS.
JRST L31
SETZM INC
OUTSTR [ASCIZ/ ******* END OF SAMPLES ******* /]
L31: OUTSTR [ASCIZ/ SMPL /]
MOVE KCNT
PUSHJ P,OUTINT
OUTSTR [ASCIZ/ TO /]
MOVE JCNT
PUSHJ P,OUTINT
OUTSTR [ASCIZ/
/]
L55: MOVE A,J
AOJ A,
JUMPE A,L7
AOJ A,
JUMPE A,L12
L5: CLRBFI
INCHWL B
PUSHJ P,ININT
MOVEM J
SETZ
INCHRS B
CAIA
PUSHJ P,ININT
MOVEM NX
HRRZI A,=3072
CAMGE A,J
MOVEM A,J
L77: SKIPLE A,J
MOVEM A,INC
ADDI A,2
JUMPGE A,L7
JRST L9
L12: MOVE A,L
ADD A,NX#
MOVEM A,LX
MOVE A,KCNT
ADD A,NX
SOJ A,
MOVEM A,JCNT
JRST L7
L9: MOVE A,L
ADD A,J
MOVEM A,LX
MOVE A,KCNT
ADD A,J
SOJ A,
MOVEM A,JCNT
SKIPGE LX
SETZM LX
L7: MOVE A,LX
AOJ A,
MOVEM A,L
MOVE A,INC
ADDM A,LX
MOVE A,JCNT
AOJ A,
MOVEM A,KCNT
MOVE A,L
CAILE A,=3072
JRST L11
JRST L1
; Read a device name and file name into DEVBLK, returning terminator
; in AC 0 and AC 1. Default extension is used if none is given.
; Skip return if successful. If no device or file is given, do not
; alter DEVBLK and non-skip return
;DEVBLK: SIXBIT/DEVNAM/
; XWD OUTPTR,INPTR
; SIXBIT/FILNAM/
; SIXBIT/EXT/
; 0
; SIXBIT/PRJPRG/
RDIOSP: PUSH 17,2
MOVE 2,-4(17)
MOVSI 1,446353 ;DSKM ; FOR IRCAM*******************
MOVEM 1,(2)
PUSHJ 17,RDIOSP+50 ;Read SIXBIT
JUMPE 1,RET
CAIE 0,":"
JRST NODEV
MOVEM 1,(2) ;Set device name
PUSHJ 17,RDIOSP+50
NODEV: MOVEM 1,2(2)
HLLZ 1,-2(17) ;Fetch default extension
MOVEM 1,3(2)
SETZ 1,
CALLI 1,24
MOVEM 1,5(2)
CAIE 0,"." ;Extension coming?
JRST NOTEXT
PUSHJ 17,RDIOSP+50 ;Yes, read it
HLLZM 1,3(2)
NOTEXT: CAIE 0,"[" ;PPN coming?
JRST SKRET ;No, return
PUSH 17,RDIOSP+60 ;Read project
PUSH 17,-4(17)
PUSHJ 17,RDINT ;(Stanford likes it PPN's right justified)
HRLM 1,5(2)
CAIE 0,","
JRST NOTCOM ;Assume he wants same programmer area
PUSH 17,RDIOSP+60 ;Read project
PUSH 17,-4(17)
PUSHJ 17,RDINT ;(Stanford likes it PPN's right justified)
HRRM 1,5(2)
NOTCOM: CAIE 0,"]" ;Don't worry if no ']'
JRST RDIOSP+44
XCT -3(17)
MOVE 0,1
;Skip return
SKRET: AOS -1(17)
;Non-skip return
RET: MOVE 1,0
POP 17,2
JRST POP3J.
PUSH 17,-4(17)
PUSH 17,RDIOSP+61
PUSHJ 17,RDSIX
POPJ 17,0
-11 ;;.PLEVEL←←.PLEVEL+2 ;(Set stack level for subr)
;Read sixbit with appropriate break characters
RDFIL1: FDVRB 16,37600 ;;CALL(RDSIX,OPCODE,[FILBRK])
374000 ;;POP0J
7,,600000
10
RDIOSP+54
POP1J.: SUB 17,POP4J.+2
JRST @2(17)
POP2J.: SUB 17,POP4J.+3
JRST @3(17)
POP3J.: SUB 17,POP4J.+4
JRST @4(17)
POP4J.: SUB 17,POP4J.+5
JRST @5(17)
2,,2
3,,3
4,,4
5,,5
ININT: SETZ
SETZ C,
CAIN B,"-"
JRST MIN
RECUR: CAIL B,60
CAILE B,71
JRST SYNE
IMULI =10
ADDI -60(B)
GTCHR: INCHRS B
CAIA
JRST RECUR
SYNE: SKIPGE C
MOVNS
POPJ P,
MIN: SETO C,
JRST GTCHR
OUTINT: HRRZI B,7 ;16
JUMPE OUTZ
IDIVI =10
ADDI A,60
HRRZM A,BLK1(B)
SOJGE B,OUTINT+1
OCHR: OUTCHR BLK1+1(B)
CAIGE B,6 ;15
AOJA B,OCHR
POPJ P,
OUTZ: CAIL B,7 ;16
HRLZI B,300000
JRST OCHR
INA5: SETZ A,
HRLZI C,700
INCHWL
CAIE 15
CAIN 12
POPJ P,
IDPB C
TRNN A,177
INCHRS
POPJ P,
JRST .-7
GNAME: SETZM FILEXT+1
SETZM FILPPN
MOVE A,['SND ']
MOVEM A,FILEXT
PUSHJ P,GETNAM
SKIPN A
MOVE A,['TEST ']
GEXT: MOVEM A,FILNAM
CAIE C,"."
JRST NOEXTN
PUSHJ P,GETNAM
MOVEM A,FILEXT
NOEXTN: CAIE C,"["
JRST FFDX
PUSHJ P,GETP
HRLZM A,FILPPN
PUSHJ P,GETP
HRRM A,FILPPN
FFDX: INCHRW C
CAIE C,12
JRST FFDX
POPJ P,
GETNAM: MOVEI A,
MOVE B,[440600,,A]
GETNML: PUSHJ P,RCH
POPJ P,
SUBI C,40
TLNE B,770000
IDPB C,B
JRST GETNML
GETP: MOVEI A,
GETPL: PUSHJ P,RCH
POPJ P,
TRNE A,770000
JRST GETPL
LSH A,6
ADDI A,-40(C)
JRST GETPL
RCH: INCHWL C
CAIN C,42
JRST RCHQ
CAIE C,11
CAIN C," "
JRST RCH
CAIE C,"."
CAIN C,","
POPJ P,
CAIE C,"["
CAIN C,"]"
POPJ P,
RCHQR: CAIGE C,40
POPJ P,
CAIL C,"a"
CAILE C,"z"
CAIA
SUBI C,40
POPJ1: AOS (P)
POPJ P,
RCHQ: INCHWL C
JRST RCHQR
DSKIN: MOVE NN,[INPO: IOWD =1024,WD]
MOVEI NN+1,0
INPUT 11,NN
POPJ P,
FILNAM: 0
FILEXT: 0
0
FILPPN: 0
BLK1: BLOCK 17
DP: 0
WD: BLOCK =1024
FW: BLOCK =1024*3
NFHD: -=500
ZER: 0
PDL: BLOCK LPDL
END BEG